import axios, { AxiosRequestConfig } from 'axios'
import { ResponseType } from '../types'
// 引入message 更改名字
import { message as antdMessage } from 'antd'
// 创建 axios 实例
const service = axios.create({
	timeoutErrorMessage: '请求超时...',
	timeout: 10000
})

// 根据环境配置请求服务器
if (process.env.NODE_ENV === 'development') {
	service.defaults.baseURL = 'http://localhost:3000'
} else {
	service.defaults.baseURL = '真实服务器地址'
}

// 请求拦截器
service.interceptors.request.use(config => {
	// 获取本地存储 token
	const token = localStorage.getItem('token');
	// 判断token是否存在 筛选掉null
	if (token) {
		// 携带token  用于权限验证
		service.defaults.headers.Authorization = `bearer ` + token
	}
	return config
}, error => {
	return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(response => {
	// 前后端约定  code

	const { code, message } = response.data
	if (code === 0) {
		
	} else {
		antdMessage.error(message)
	}
	return response
}, error => {
	if (error && error.response) {
		// http: 状态码
		switch (error.status) {
			case 400:
				antdMessage.error('客户端错误');
				break
			case 401:
				antdMessage.error('未登录， 请登录');
				break
			case 403:
				antdMessage.error('未授权， 请登录');
				break
			case 404:
				antdMessage.error('资源未找到');
				break
			case 500:
				antdMessage.error('服务端错误');
				break
		}
	}
	return Promise.reject(error)
})


// 请求函数
export async function request<T = any>(config: AxiosRequestConfig): Promise<ResponseType<T>> {
	try {
		const resp = await service.request<ResponseType<T>>(config)
		return resp.data
	} catch (error: any) {
		const message = error.message || '请求失败'
		return {
			code: -1,
			message,
			data: null as any
		}
	}
}


